package com.bauer.base.designpattern.singleton;

/**
 * @Author ：rui.wei
 * @Date ：Created in 10:24 2019/7/2
 * @Description：
 */
public class SynchronizedSingleton {

    private static volatile SynchronizedSingleton instance;


    /**
     * 私有化构造方法
     */
    private SynchronizedSingleton() {
    }

    /**
     * 双重锁 实现单例模式
     * 避免了每次加锁访问  提高了方位效率
     */
    public static SynchronizedSingleton getInstance() {
        if (instance == null) {
            synchronized (SynchronizedSingleton.class) {
                if (instance == null) {
                    instance = new SynchronizedSingleton();
                }
            }
        }
        return instance;
    }


    /**
     * 同步锁  实现单例模式
     * 缺点  每次访问都需要加锁
     * @return
     */
    public synchronized static SynchronizedSingleton getInstanceSynchronized() {
        if (instance == null) {
            instance = new SynchronizedSingleton();
        }
        return instance;
    }

}
